//package run.siyuan.common.util;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.collection.ListUtil;
//import cn.hutool.core.thread.ThreadUtil;
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil;
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.dingtalk.api.DefaultDingTalkClient;
//import com.dingtalk.api.DingTalkClient;
//import com.dingtalk.api.request.OapiRobotSendRequest;
//import com.dingtalk.api.response.OapiRobotSendResponse;
//import lombok.AllArgsConstructor;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import javax.crypto.Mac;
//import javax.crypto.spec.SecretKeySpec;
//import java.net.URLEncoder;
//import java.nio.charset.StandardCharsets;
//import java.util.Base64;
//import java.util.List;
//
///**
// * 钉钉服务
// *
// * @author jinjingsu
// * @date 2021/06/07
// */
//@Slf4j
//@Component
//public class DdingSDKUtil {
//
//    @Value("${spring.profiles.active}")
//    private String profiles = "prod";
//
//    /**
//     * 异常监控发送消息
//     *
//     * @param param json
//     */
//    public void dataMonitoringToDding(JSONObject param) {
//        String message = "环境: {}\n" +
//                "告警名称: {}\n" +
//                "监控配置: {}\n" +
//                "异常数量：{}\n";
//        DdingConfig config = buildDdingConfig(param);
//        String num = param.getStr("num");
//        message = StrUtil.format(message, profiles, config.getTitle(), config.getValue(), num);
//        config.setMessage(message);
//        log.info("异常信息 config:{}",config.toString());
//        this.doDinDing(config);
//    }
//
//    /**
//     * 异常监控发送消息
//     *
//     * @param param json
//     */
//    public void dataMonitoringToDdingMkd(JSONObject param) {
//        String message = "<font face=\"楷体\">环境: <font color=\"red\">{}</font></font></br>\n" +
//                "\n" +
//                "<font face=\"楷体\">告警名称: <font color=\"red\" >{}</font></font></br>\n" +
//                "\n" +
//                "<font face=\"楷体\">监控配置：</font>\n" +
//                "\n" +
//                "<font color=\"red\" face=\"楷体\" >{}</font></br>\n" +
//                "\n" +
//                "<font face=\"楷体\">异常信息：<font color=\"red\">{}</font></font></br>\n"+
//                "\n "
//                ;
//        DdingConfig config = buildDdingConfig(param);
//        String num = param.getStr("num");
//        message = StrUtil.format(message, profiles, config.getTitle(), config.getValue(), num);
//        log.info("异常信息 config:{}",config.toString());
//
//        config.setMessage(message);
//        this.doDinDingMkd(config);
//    }
//
//    private DdingConfig buildDdingConfig(JSONObject param){
//        DdingConfig config = new DdingConfig();
//        String webhook = "https://oapi.dingtalk.com/robot/send?access_token=dfd6bde717917d8d37991fcc3609ae78a0bf63d7c1416b564edc83fdb0229360";
//        String secret = "SEC996dd33af678cfbc4a9db07c947f43f3451e34b4637bafbedefd1371eb105120";
//        List<String> mobiles = ListUtil.empty();
//        String recipient = param.getStr("monitoringMsgRecipient");
//        if (StrUtil.isNotBlank(recipient)) {
//            mobiles = StrUtil.split(recipient, ',');
//        }
//        String title = param.getStr("monitoringType");
//        if (ObjectUtil.isNotEmpty(param.getStr("monitoringRemarks"))) {
//            title = param.getStr("monitoringRemarks");
//        }
//        String value = param.getStr("monitoringValue");
//        if (StrUtil.isBlank(value)) {
//            value = "id=" + param.getLong("id");
//        }
//        config.setWebhook(webhook);
//        config.setSecret(secret);
//        config.setMobiles(mobiles);
//        config.setTitle(title);
//        config.setValue(value);
//        return config;
//    }
//    /**
//     * 发送消息指定用户-文本
//     *
//     * @param config config
//     */
//    private void doDinDing(DdingConfig config) {
//        ThreadUtil.execute(
//                () -> {
//                    try {
//                        String serverUrl = config.getWebhook() + this.encode(config.getSecret());
//                        DingTalkClient client = new DefaultDingTalkClient(serverUrl);
//                        OapiRobotSendRequest request = new OapiRobotSendRequest();
//                        request.setMsgtype("text");
//                        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
//                        text.setContent(config.getMessage());
//                        request.setText(text);
//                        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
//                        if (CollUtil.isNotEmpty(config.getMobiles())) {
//                            at.setAtMobiles(config.getMobiles());
//                        }
//                        at.setIsAtAll(config.isAtAll());
//                        request.setAt(at);
//                        OapiRobotSendResponse response = null;
//
//                        response = client.execute(request);
//                        log.info("钉钉消息响应:{}", response.getBody());
//                    } catch (Exception e) {
//                        log.info(e.getMessage());
//                        throw new RuntimeException(e);
//                    }
//                }
//        );
//    }
//
//    /**
//     * 发送消息指定用户-markdown
//     *
//     * @param config config
//     */
//    private void doDinDingMkd(DdingConfig config) {
//        ThreadUtil.execute(
//                () -> {
//                    try {
//                        String serverUrl = config.getWebhook() + this.encode(config.getSecret());
//                        DingTalkClient client = new DefaultDingTalkClient(serverUrl);
//                        OapiRobotSendRequest request = new OapiRobotSendRequest();
//                        request.setMsgtype("markdown");
//                        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
//                        if (CollUtil.isNotEmpty(config.getMobiles())) {
//                            StringBuffer buffer = new StringBuffer(config.getMessage());
//                            for (String mobile : config.getMobiles()) {
//                                buffer.append("<font color=\"#2690fc\"> @").append(mobile).append(" </font>");
//                            }
//                            config.setMessage(buffer.toString());
//                            at.setAtMobiles(config.getMobiles());
//                        }
//                        at.setIsAtAll(false);
//                        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
//
//                        markdown.setTitle(config.getTitle());
//                        markdown.setText(config.getMessage());
//                        request.setMarkdown(markdown);
//                        request.setAt(at);
//                        OapiRobotSendResponse response = null;
//
//                        response = client.execute(request);
//                        log.info("钉钉消息响应:{}", response.getBody());
//                    } catch (Exception e) {
//                        log.info(e.getMessage());
//                        throw new RuntimeException(e);
//                    }
//                }
//        );
//    }
//
//
//    /**
//     * 生成时间戳和验证信息
//     */
//    public String encode(String secret) throws Exception {
//        //获取时间戳
//        Long timestamp = System.currentTimeMillis();
//        //把时间戳和密钥拼接成字符串，中间加入一个换行符
//        String stringToSign = timestamp + "\n" + secret;
//        //声明一个Mac对象，用来操作字符串
//        Mac mac = Mac.getInstance("HmacSHA256");
//        //初始化，设置Mac对象操作的字符串是UTF-8类型，加密方式是SHA256
//        mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
//        //把字符串转化成字节形式
//        byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
//        //新建一个Base64编码对象
//        Base64.Encoder encoder = Base64.getEncoder();
//        //把上面的字符串进行Base64加密后再进行URL编码
//        String sign = URLEncoder.encode(encoder.encodeToString(signData), "UTF-8");
//        System.out.println(timestamp);
//        System.out.println(sign);
//        return "&timestamp=" + timestamp + "&sign=" + sign;
//    }
//
//
//    @Data
//    @AllArgsConstructor
//    @NoArgsConstructor
//    public static class DdingConfig{
//        private String webhook;
//        private String secret;
//        private String title;
//        private String message;
//        private String value;
//        private List<String> mobiles;
//        private boolean isAtAll;
//    }
//
//
//    public static void main(String[] args) {
//        String s = "\n" +
//                "  {\n" +
//                "    \"id\": 1,\n" +
//                "    \"monitoringType\": \"generalDataMonitoringService\",\n" +
//                "    \"monitoringValue\": \"select * from `youpik-member-center{profiles}`.member limit 1;\",\n" +
//                "    \"monitoringMsgRecipient\": \"15870979735,13879353502\",\n" +
//                "    \"monitoringRemarks\": \"用户数异常\",\n" +
//                "    \"createTime\": 1670573959000,\n" +
//                "    \"updateTime\": 1670573959000,\n" +
//                "    \"deleted\": 0\n" +
//                "  }\n" +
//                "";
//        JSONObject json = JSONUtil.parseObj(s);
//        DdingSDKUtil dingDingUtil = new DdingSDKUtil();
//        json.set("num", 9999);
//
//
//
////        dingDingUtil.dataMonitoringToDding(json);
//        dingDingUtil.dataMonitoringToDdingMkd(json);
//
//    }
//}